#ifndef BASE_MD5DIGEST_H_
#define BASE_MD5DIGEST_H_

#include "md5.h"
#include "messagedigest.h"

namespace base {

	// A simple wrapper for our MD5 implementation.
	class Md5Digest : public MessageDigest {
	public:
		enum { kSize = 16 };
		Md5Digest() {
			MD5Init(&ctx_);
		}
		virtual size_t Size() const {
			return kSize;
		}
		virtual void Update(const void* buf, size_t len) {
			MD5Update(&ctx_, static_cast<const uint8*>(buf), len);
		}
		virtual size_t Finish(void* buf, size_t len) {
			if (len < kSize) {
				return 0;
			}
			MD5Final(&ctx_, static_cast<uint8*>(buf));
			MD5Init(&ctx_);  // Reset for next use.
			return kSize;
		}
	private:
		MD5_CTX ctx_;
	};

}  // namespace base

#endif  // BASE_MD5DIGEST_H_
